SELECT
       c1, 
       FIRST_VALUE(c1) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c1,
       c2,
       FIRST_VALUE(c2) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c2,
       c3,
       FIRST_VALUE(c3) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c3,
       c4,
       FIRST_VALUE(c4) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c4,
       c5,
       FIRST_VALUE(c5) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c5,
       c6,
       FIRST_VALUE(c6) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c6,
       c7,
       FIRST_VALUE(c7) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c7,
       c8,
       FIRST_VALUE(c8) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c8,
       c9,
       FIRST_VALUE(c9) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c9
FROM ( SELECT * FROM "t_alltype.parquet") subqry
